<?php

namespace common\models;

use Yii;
use yii\base\NotSupportedException;
use yii\behaviors\TimestampBehavior;
use yii\db\ActiveRecord;
use yii\web\IdentityInterface;
/**
 * This is the model class for table "user".
 *
 * @property integer $id
 * @property string $username
 * @property string $password_hash
 * @property string $phone
 * @property string $email
 * @property string $real_name
 * @property integer $third_user_id
 * @property integer $status
 * @property string $available_money
 * @property string $create_time
 * @property string $reigster_ip
 * @property string $last_login_time
 * @property string $last_login_ip
 */
class User extends \yii\db\ActiveRecord implements IdentityInterface
{
    public $auth_key;
    public $created_at;
    public $updated_at;
    const STATUS_DELETED = 0;
    const STATUS_ACTIVE = 10;
    /**
     * @inheritdoc
     */
    public static function tableName()
    {
        return 'user';
    }

    public function behaviors()
    {
        return [
            TimestampBehavior::className(),
        ];
    }
    /**
     * @inheritdoc
     */
    public function rules()
    {
        return [
            [['username', 'password_hash', 'phone'], 'required'],
            [['third_user_id', 'status'], 'integer'],
            [['available_money'], 'number'],
            [['create_time', 'last_login_time','email', 'real_name'], 'safe'],
            [['username', 'password_hash', 'email'], 'string', 'max' => 255],
            [['phone', 'reigster_ip', 'last_login_ip'], 'string', 'max' => 20],
            [['real_name','username'], 'string', 'min' => 6 ,'max' => 100],
            [['username'], 'unique'],
            [['email'],'unique'],
            [['email'], 'email'],
            ['status', 'default', 'value' => self::STATUS_ACTIVE],
            ['status', 'in', 'range' => [self::STATUS_ACTIVE, self::STATUS_DELETED]],
        ];
    }

    /**
     * @inheritdoc
     */
    public function attributeLabels()
    {
        return [
            'id' => 'ID',
            'username' => '用户名(手机号)',
            'password_hash' => '密码',
            'phone' => '手机号',
            'email' => 'email',
            'real_name' => '真实姓名',
            'third_user_id' => '第三方账号',
            'status' => '状态',//1普通用户 2企业用户 9黑名单',
            'available_money' => '余额',
            'create_time' => '注册时间',
            'reigster_ip' => '注册ip',
            'last_login_time' => '上次登录时间',
            'last_login_ip' => '上次登录ip',
        ];
    }

    public static function itemAlias ($type, $code = NULL)
    {
        $_items = [
            'post_category_id' => [
                ''  =>'全部',
                '1' => "帮助 - 新手指南",              
                '2' => "帮助 - 进货指南",
                '3' => "帮助 - 支付配送",
                '4' => "帮助 - 售后服务",   
                '5' => "关于我们",
                '9' => "公告",
                             
            ],
            'status' => [
                //''  =>'状态',
                '10' => "普通用户",              
                '2' => "企业用户",
                '9' => "黑名单",                
            ],
        ];

        if (isset($code))
            return isset($_items[$type][$code]) ? $_items[$type][$code] : false;
        else
            return isset($_items[$type]) ? $_items[$type] : false;
    }

    public function beforeSave($insert) {
        if (parent::beforeSave($insert)) {
            //是否是新添加
            if($this->isNewRecord) {
                if(!$this->status) $this->status = 10;
                if(!$this->third_user_id) $this->third_user_id =0;
                if(!$this->available_money) $this->available_money =0;
                if(!$this->reigster_ip) $this->reigster_ip ='';
                if(!$this->last_login_time) $this->last_login_time =date("Y-m-d H:i:s", time());
                if(!$this->last_login_ip) $this->last_login_ip='';
                if(!$this->email) $this->email='';
                if(!$this->real_name) $this->real_name='';
                $this->create_time = date("Y-m-d H:i:s", time());
              
                

            

            }else{
               // $this->update_time = date("Y-m-d H:i:s", time());
            }
            return true;
        } else {
            return false;
        }
    }

    /**
     * @inheritdoc
     */
    public static function findIdentity($id)
    {
        return static::findOne(['id' => $id, 'status' => self::STATUS_ACTIVE]);
    }

    /**
     * @inheritdoc
     */
    public static function findIdentityByAccessToken($token, $type = null)
    {
        throw new NotSupportedException('"findIdentityByAccessToken" is not implemented.');
    }

    /**
     * Finds user by username
     *
     * @param string $username
     * @return static|null
     */
    public static function findByPhone($phone)
    {
        return static::findOne(['phone' => $phone, 'status' => self::STATUS_ACTIVE]);
    }

    /**
     * Finds user by password reset token
     *
     * @param string $token password reset token
     * @return static|null
     */
    public static function findByPasswordResetToken($token)
    {
        if (!static::isPasswordResetTokenValid($token)) {
            return null;
        }

        return static::findOne([
            'password_reset_token' => $token,
            'status' => self::STATUS_ACTIVE,
        ]);
    }

    /**
     * Finds out if password reset token is valid
     *
     * @param string $token password reset token
     * @return boolean
     */
    public static function isPasswordResetTokenValid($token)
    {
        if (empty($token)) {
            return false;
        }

        $timestamp = (int) substr($token, strrpos($token, '_') + 1);
        $expire = Yii::$app->params['user.passwordResetTokenExpire'];
        return $timestamp + $expire >= time();
    }

    /**
     * @inheritdoc
     */
    public function getId()
    {
        return $this->getPrimaryKey();
    }

    /**
     * @inheritdoc
     */
    public function getAuthKey()
    {
        return $this->auth_key;
    }

    /**
     * @inheritdoc
     */
    public function validateAuthKey($authKey)
    {
        return $this->getAuthKey() === $authKey;
    }

    /**
     * Validates password
     *
     * @param string $password password to validate
     * @return boolean if password provided is valid for current user
     */
    public function validatePassword($password)
    {
        return Yii::$app->security->validatePassword($password, $this->password_hash);
    }

    /**
     * Generates password hash from password and sets it to the model
     *
     * @param string $password
     */
    public function setPassword($password)
    {
        $this->password_hash = Yii::$app->security->generatePasswordHash($password);
    }

    /**
     * Generates "remember me" authentication key
     */
    public function generateAuthKey()
    {
        $this->auth_key = Yii::$app->security->generateRandomString();
    }

    /**
     * Generates new password reset token
     */
    public function generatePasswordResetToken()
    {
        $this->password_reset_token = Yii::$app->security->generateRandomString() . '_' . time();
    }

    /**
     * Removes password reset token
     */
    public function removePasswordResetToken()
    {
        $this->password_reset_token = null;
    }
}
